﻿using EasyModbus;

namespace Zhy.EasyModbusTCP
{
    internal class Program
    {
        static ModbusClient modbusClient;
        static void Main(string[] args)
        {
            //ModbusClientWrapper clientWrapper = new ModbusClientWrapper();
            //clientWrapper.Connect();

            //try
            //{
            //    // 使用Task来异步读取寄存器
            //    Task.Run(() =>
            //    {
            //        var result = clientWrapper.ReadHoldingRegisters(0, 1);
            //        Console.WriteLine($"Register value: {result}");
            //    }); // 假设我们读取第一个寄存器
            //    //Console.WriteLine($"Register value: {result}");
            //}
            //catch (Exception ex)
            //{
            //    Console.WriteLine($"Error: {ex.Message}");
            //}
            //finally
            //{
            //    //clientWrapper.Disconnect();
            //}






            //MyModbusTCP.Instance.Connect();
            //var registers = MyModbusTCP.Instance.ReadHoldingRegisters(3, 1);
            //Task.Run(() =>
            //{
            //    try
            //    {

            //    }
            //    catch (Exception ex)
            //    {
            //        Console.WriteLine("读取寄存器时发生错误: " + ex.Message);
            //    }
            //    finally
            //    {
            //        //MyModbusTCP.Instance.Disconnect();
            //    }
            //});





            // Modbus TCP 服务器地址
            string ipAddress = "127.0.0.1"; // 修改为你的 Modbus TCP 服务器的 IP 地址
            int port = 502; // Modbus TCP 的默认端口是 502
            byte unitIdentifier = 1; // Modbus 设备单元标识符，根据你的设备设置

            // 创建 Modbus TCP 客户端实例
            ModbusClient modbusClient = new ModbusClient(ipAddress, port);
            modbusClient.UnitIdentifier = unitIdentifier;
            modbusClient.Connect(); // 连接到 Modbus TCP 服务器

            //try
            //{
            //    // 从保持寄存器读取数据，例如读取地址为 0 的寄存器值，寄存器数量为 10
            //    int[] registers = modbusClient.ReadHoldingRegisters(3, 1);
            //    Console.WriteLine("读取到的寄存器值:");
            //    foreach (var reg in registers)
            //    {
            //        Console.WriteLine(reg);
            //    }
            //}
            //catch (Exception ex)
            //{
            //    Console.WriteLine("读取寄存器时发生错误: " + ex.Message);
            //}
            //finally
            //{
            //    modbusClient.Disconnect(); // 断开连接
            //}


            Task.Run(() =>
            {
                try
                {
                    // 从保持寄存器读取数据，例如读取地址为 0 的寄存器值，寄存器数量为 10
                    int[] registers = modbusClient.ReadHoldingRegisters(3, 1);
                    Console.WriteLine("读取到的寄存器值:");
                    foreach (var reg in registers)
                    {
                        Console.WriteLine(reg);
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("读取寄存器时发生错误: " + ex.Message);
                }
                finally
                {
                    //modbusClient.Disconnect(); // 断开连接
                }
            });
            Console.ReadKey();
        }
    }
}
